var readline = require('readline-sync')
readline.setDefaultOptions({ prompt: '' })
var readline = readline.prompt
let [n, m] = readline().split(' ').map((item) => parseInt(item)) // 读出n和m 表示n行m列
let chessBoard = []
for (let i = 0; i < n; i++) {
  let row = readline().split(' ').map((item) => parseInt(item)) // 读出每一行
  chessBoard.push(row) // 放入棋盘中
}
let [x, y, z, w] = readline().split(' ').map((item) => parseInt(item)) // 读出坐标
// let resCount = 0 // 走的路径方法个数
let dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]] // 可以向四个方向走
let visited = new Array(n).fill(0).map(() => new Array(m).fill(0)) // 表示没访问过
let dp = new Array(n).fill(0).map(() => new Array(m).fill(0)) // dp[i][j] 表示走到这一位多少种方式
dp[x][y] = 1 // 初始是一种
function bfs (x, y) {
  let queue = [] // 准备一个队列
  queue.push([x, y]) // 将这个的下标放入队列
  visited[x][y] = 1 // 表示这个访问过
  while (queue.length) {
    let [lx, ly] = queue.shift() // 弹出
    for (let i = 0; i < dirs.length; i++) {
      let nx = lx + dirs[i][0]
      let ny = ly + dirs[i][1] // 新的x和y
      if (nx < 0 || nx >= n || ny < 0 || ny >= m || chessBoard[nx][ny] <= chessBoard[lx][ly]) {
        continue
      }
      dp[nx][ny] = dp[nx][ny] + dp[x][y] // 下一个节点的方法是前一个的+原来的路径条数
      queue.push([nx, ny]) // 放入新节点位置
    }
  }
}
bfs(x, y)
// console.log(dp);
console.log(dp[z][w] % 1e9);